package com.demo.javaee.project.h2Jdbc;

import com.demo.javaee.project.json.model.StudentDTO;

import java.sql.*;

/**
 *
 * @author Lychee
 * @author nisuangewo
 * @date 2019-11-28
 *
 * */

public class H2Jdbc {
    //  H2
    //  使用H2的本地嵌入式连接
    //  这个模式会与
    //  指定数据库文件：
    //      jdbc:h2:~/test
    //      jdbc:h2:file:/data/sample
    //      jdbc:h2:file:C:/data/sample (Windows only)
    //  如果数据库不存在，会在用户目录创建一个数据库文件，缺省用户是sa，密码是空字符串
    private static final String URL = "jdbc:h2:~/student;MODE=MYSQL;DB_CLOSE_DELAY=-1";
    //  本地连接的内存模式，程序模式时，应用程序结束后，数据库就被清除。
    private static final String URL_MEM = "jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_DELAY=-1";

    // 使用H2的TCP连接模式
    // 使用服务器模式连接，必须先独立运行H2的数据库服务器,参考开发环境文档的H2章节；
    // java -jar h2*.jar
    // java -cp h2*.jar org.h2.tools.Server
    // 上面命令中的 -cp 参数，作用与 -classpath 一样，是指定类运行所依赖其他类的路径，即指定给解释器到哪里找到你的.class文件，通常是类库，jar包之类，需要全路径到jar包;
    // 如果有多个jar包，可以用分隔符分隔，window上分号“;”分隔，linux上是分号“:”分隔。不支持通配符，需要列出所有jar包，用一点“.”代表当前路径。
    private static final String URL_TCP = "jdbc:h2:tcp://localhost/~/test1;MODE=MYSQL;DB_CLOSE_DELAY=-1";
    // 内存模式
    private static final String URL_TCP_MEM = "jdbc:h2:tcp://localhost/mem:test1;MODE=MYSQL;DB_CLOSE_DELAY=-1";

    private static final String DRIVER = "org.h2.Driver";

    private static final String NAME = "root";
    private static final String PASSWORD = "root";

    public boolean save(StudentDTO student) {
        try (Connection connection = DriverManager.getConnection(URL, NAME, PASSWORD)) {

            Statement statement = connection.createStatement();
            statement.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS `student` (" +
                            "  `id` int(20) unsigned NOT NULL AUTO_INCREMENT," +
                            "  `name` varchar(100) NOT NULL," +
                            "  `no` BIGINT NOT NULL," +
                            "  `tuition` decimal NOT NULL," +
                            "  `birthday` date NOT NULL," +
                            "  PRIMARY KEY (`id`)" +
                            ");"
            );
            String sql = "insert into `student` (`name`,`no`, `tuition`, `birthday`) values " +
                    "('" + student.getName() + "','" + student.getNo() + "','" + student.getTuition() + "', '" + student.getBirthday() + "');";

            statement.executeUpdate(sql);
            ResultSet rs = statement.executeQuery("select * from student");//选择import java.sql.ResultSet;

            // 遍历每行记录
            while (rs.next()) {
                //如果结果集中有数据，就会循环打印出来
                System.out.println(rs.getString("id") + "," + rs.getString("name") + "," + rs.getDate("birthday"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }
}
